/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package servlets;

import beans.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.*;

/**
 *
 * @author arthur
 */
public class Curriculo extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        doPost(request, response);
    }

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        HttpSession session = request.getSession();

        InformacoesPessoais informacoesPessoais = initInformacoesPessoais(request);
        List<AtuacaoProfissional> atuacoesProfissionais = initAtuacaoProfissional(request);
        List<FormacaoAcademica> formacoesAcademicas = initFormacaoAcademica(request);
        List<FormacaoComplementar> formacoesComplementares = initFormacaoComplementar(request);
        List<Idioma> idiomas = initIdioma(request);
        List<ProducaoBibliografica> producoesBibliograficas = initProducaoBibliografica(request);

        Identificacao id = (Identificacao) session.getAttribute("identificacao");

        String fileLocation = getServletContext().getRealPath("/dados/" + id.getEmail());

        if (informacoesPessoais != null) {
            writeInfo(fileLocation + "_informacoesPessoais.obj", informacoesPessoais);
            session.setAttribute("informacoesPessoais", informacoesPessoais);
        }
        if (atuacoesProfissionais != null) {
//            writeInFile(fileLocation + "_atuacoesProfissionais.obj", atuacoesProfissionais);
            session.setAttribute("atuacoesProfissionais", atuacoesProfissionais);
        }
        if (formacoesAcademicas != null) {
            writeFormAcademicaList(fileLocation + "_formacoesAcademicas.obj", formacoesAcademicas);
            session.setAttribute("formacoesAcademicas", formacoesAcademicas);
        }
        if (formacoesComplementares != null) {
//            writeInFile(fileLocation + "_formacoesComplementares.obj", formacoesComplementares);
            session.setAttribute("formacoesComplementares", formacoesComplementares);
        }
        if (idiomas != null) {
//            writeInFile(fileLocation + "_idiomas.obj", idiomas);
            session.setAttribute("idiomas", idiomas);
        }
        if (producoesBibliograficas != null) {
//            writeInFile(fileLocation + "_producoesBibliograficas.obj", producoesBibliograficas);
            session.setAttribute("producoesBibliograficas", producoesBibliograficas);
        }

        try {
            String url = "/inicio.jsp";
            RequestDispatcher dispatcher = request.getRequestDispatcher(url);
            dispatcher.forward(request, response);
        } catch (ServletException | IOException ex) {
            Logger.getLogger(Curriculo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public InformacoesPessoais initInformacoesPessoais(HttpServletRequest request) {

        if (request.getParameter("nome") != null) {
            InformacoesPessoais informacoesPessoais = new InformacoesPessoais();
            informacoesPessoais.setNome(request.getParameter("nome"));
            informacoesPessoais.setCpf(request.getParameter("cpf"));
            informacoesPessoais.setCidade(request.getParameter("cidade"));
            informacoesPessoais.setBairro(request.getParameter("bairro"));
            informacoesPessoais.setEstado(request.getParameter("estado"));
            informacoesPessoais.setNumero(request.getParameter("numero"));
            informacoesPessoais.setRua(request.getParameter("rua"));

            return informacoesPessoais;
        } else {
            return null;
        }
    }

    public List<AtuacaoProfissional> initAtuacaoProfissional(HttpServletRequest request) {
        String[] dataInicio = request.getParameterValues("ap_anoI");
        String[] dataFim = request.getParameterValues("ap_anoF");
        String[] descricao = request.getParameterValues("ap_desc");
        String[] instituicao = request.getParameterValues("ap_inst");

        if (dataInicio != null) {
            List<AtuacaoProfissional> atuacoes = new ArrayList<>();
            AtuacaoProfissional atuacaoTemp = new AtuacaoProfissional();
            for (int i = 0; i < dataInicio.length; i++) {
                atuacaoTemp.setDataInicio(dataInicio[i]);
                atuacaoTemp.setDataFim(dataFim[i]);
                atuacaoTemp.setDescricao(descricao[i]);
                atuacaoTemp.setInstituicao(instituicao[i]);
                atuacoes.add(atuacaoTemp);
            }

            return atuacoes;
        } else {
            return null;
        }

    }

    public List<FormacaoAcademica> initFormacaoAcademica(HttpServletRequest request) {

        String[] dataInicio = request.getParameterValues("f_anoI");
        String[] dataFim = request.getParameterValues("f_anoF");
        String[] formacao = request.getParameterValues("f_form");
        String[] universidade = request.getParameterValues("f_uni");
        String[] titulo = request.getParameterValues("f_tit");
        String[] orientador = request.getParameterValues("f_ori");
        String[] area = request.getParameterValues("f_area");

        if (dataInicio != null) {
            List<FormacaoAcademica> formacoesAcademicas = new ArrayList<>();
            FormacaoAcademica formacaoTemp = new FormacaoAcademica();
            for (int i = 0; i < dataInicio.length; i++) {
                formacaoTemp.setDataInicio(dataInicio[i]);
                formacaoTemp.setDataFim(dataFim[i]);
                formacaoTemp.setFormacao(formacao[i]);
                formacaoTemp.setUniversidade(universidade[i]);
                formacaoTemp.setTitulo(titulo[i]);
                formacaoTemp.setOrientador(orientador[i]);
                formacaoTemp.setArea(area[i]);
                formacoesAcademicas.add(formacaoTemp);
            }
            return formacoesAcademicas;
        } else {
            return null;
        }

    }

    public List<FormacaoComplementar> initFormacaoComplementar(HttpServletRequest request) {
        String[] dataInicio = request.getParameterValues("fc_anoI");
        String[] dataFim = request.getParameterValues("fc_anoF");
        String[] formacao = request.getParameterValues("fc_form");

        if (dataInicio != null) {
            List<FormacaoComplementar> formacoesComplementares = new ArrayList<>();
            FormacaoComplementar formacaoTemp = new FormacaoComplementar();
            for (int i = 0; i < dataInicio.length; i++) {
                formacaoTemp.setDataInicio(dataInicio[i]);
                formacaoTemp.setDataFim(dataFim[i]);
                formacaoTemp.setFormacao(formacao[i]);
                formacoesComplementares.add(formacaoTemp);
            }

            return formacoesComplementares;
        } else {
            return null;
        }

    }

    public List<Idioma> initIdioma(HttpServletRequest request) {
        String[] idioma = request.getParameterValues("i_idi");
        String[] compreende = request.getParameterValues("i_comp");
        String[] fala = request.getParameterValues("i_fala");
        String[] le = request.getParameterValues("i_le");
        String[] escreve = request.getParameterValues("i_escr");

        if (idioma != null) {
            List<Idioma> idiomas = new ArrayList<>();
            Idioma idiomaTemp = new Idioma();

            for (int i = 0; i < idioma.length; i++) {
                idiomaTemp.setIdioma(idioma[i]);
                idiomaTemp.setCompreende(compreende[i]);
                idiomaTemp.setFala(fala[i]);
                idiomaTemp.setLe(le[i]);
                idiomaTemp.setEscreve(escreve[i]);
                idiomas.add(idiomaTemp);
            }

            return idiomas;
        } else {
            return null;
        }
    }

    public List<ProducaoBibliografica> initProducaoBibliografica(HttpServletRequest request) {
        String[] titulo = request.getParameterValues("pb_tit");
        String[] data = request.getParameterValues("pb_ano");
        String[] autores = request.getParameterValues("pb_aut");
        String[] tipo = request.getParameterValues("pb_tipo");

        if (titulo != null) {
            List<ProducaoBibliografica> producoesBibliograficas = new ArrayList<>();
            ProducaoBibliografica prodTemp = new ProducaoBibliografica();
            for (int i = 0; i < titulo.length; i++) {
                prodTemp.setTitulo(titulo[i]);
                prodTemp.setData(data[i]);
                prodTemp.setAutores(autores[i]);
                prodTemp.setTipo(tipo[i]);
                producoesBibliograficas.add(prodTemp);
            }
            return producoesBibliograficas;
        } else {
            return null;
        }

    }


    public void writeInfo(String fileLocation, InformacoesPessoais toWrite) {
        InformacoesPessoais info = toWrite;
        ObjectOutputStream objOut = null;
        try {
            FileOutputStream out = new FileOutputStream(fileLocation);
            objOut = new ObjectOutputStream(out);
            objOut.writeObject(info);
        } catch (IOException e) {
        } finally {
            if (objOut != null) {
                try {
                    objOut.close();
                } catch (IOException e) {
                }
            }
        }
    }
     public void writeFormAcademicaList(String fileLocation, List<FormacaoAcademica> dataToWrite) {
        List<FormacaoAcademica> formacoes = dataToWrite;
        ObjectOutputStream objOut = null;
        try {
            FileOutputStream out = new FileOutputStream(fileLocation);
            objOut = new ObjectOutputStream(out);
            objOut.writeObject(formacoes);
        } catch (IOException e) {
        } finally {
            if (objOut != null) {
                try {
                    objOut.close();
                } catch (IOException e) {
                }
            }
        }
    }
}